package com.hh.baseframework.util.document;

//import com.jacob.activeX.ActiveXComponent;
//import com.jacob.com.ComThread;
//import com.jacob.com.Dispatch;
//import com.jacob.com.Variant;

public class WordtoHtml {
//	/**
//	 * 文档转换函数
//	 * 
//	 * @param docfile
//	 *            word文档的绝对路径加文件名(包含扩展名)
//	 * @param htmlfile
//	 *            转换后的html文件绝对路径和文件名(不含扩展名)
//	 */
//	public static void change(String docfile, String htmlfile) {
//		ActiveXComponent app = new ActiveXComponent("Word.Application");// 启动word
//		try {
//			app.setProperty("Visible", new Variant(false));
//			// 设置word不可见
//			Dispatch docs = app.getProperty("Documents").toDispatch();
//			Dispatch doc = Dispatch.invoke(
//					docs,
//					"Open",
//					Dispatch.Method,
//					new Object[] { docfile, new Variant(false),
//							new Variant(true) }, new int[1]).toDispatch();
//			// 打开word文件
//			Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {
//					htmlfile, new Variant(8) }, new int[1]);
//			// 作为html格式保存到临时文件
//			Variant f = new Variant(false);
//			Dispatch.call(doc, "Close", f);
//		} catch (Exception e) {
//			e.printStackTrace();
//		} finally {
//			app.invoke("Quit", new Variant[] {});
//		}
//	}
//
//	public static void word2xml() {
//		ComThread.InitSTA();
//		ActiveXComponent app = new ActiveXComponent("Word.Application");// 启动word
//		String inFile = "D:/word/test.docx";// 要转换的word文件
//		String otFile = "D:/word/test.xml";// 目标文件
//		boolean flag = false;
//		try {
//			app.setProperty("Visible", new Variant(false));// 设置word不可见
//			Dispatch docs = app.getProperty("Documents").toDispatch();
//			Dispatch doc = Dispatch.invoke(
//					docs,
//					"Open",
//					Dispatch.Method,
//					new Object[] { inFile, new Variant(false),
//							new Variant(true) }, new int[1]).toDispatch();// 打开word文件
//			Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {
//					otFile, new Variant(11) }, new int[1]);// 作为html格式保存到临时文件
//			Variant f = new Variant(true);
//			Dispatch.call((Dispatch) doc, "Close", f);
//			flag = true;
//		} catch (Exception e) {
//			e.printStackTrace();
//		} finally {
//			app.invoke("Quit", new Variant[] {});
//		}
//		ComThread.Release();
//	}
//
//	public static void main(String[] strs) {
//		// WordtoHtml.change("d:/aaa.docx", "d:/t.xml");
//		word2xml();
//	}

	
	
	
	
	
	
	
	
	
	
//	import java.io.File;
//	import com.jacob.activeX.ActiveXComponent;
//	import com.jacob.com.Dispatch;
//	import com.jacob.com.Variant;
//	class WordBean {
//		// 代表一个word 程序
//		private ActiveXComponent MsWordApp = null;
//		// 代表进行处理的word 文档
//		private Dispatch document = null;
//		public WordBean() {
//			// Open Word if we/'ve not done it already
//			if (MsWordApp == null) {
//				MsWordApp = new ActiveXComponent("Word.Application");
//			}
//		}
//		// 设置是否在前台打开 word 程序 ，
//		public void setVisible(boolean visible) {
//			MsWordApp.setProperty("Visible", new Variant(visible));
//			// 这一句作用相同
//			// Dispatch.put(MsWordApp, "Visible", new Variant(visible));
//		}
//		// 创建一个新文档
//		public void createNewDocument() {
//			// Find the Documents collection object maintained by Word
//			// documents表示word的所有文档窗口，（word是多文档应用程序）
//			Dispatch documents = Dispatch.get(MsWordApp, "Documents").toDispatch();
//			// Call the Add method of the Documents collection to create
//			// a new document to edit
//			document = Dispatch.call(documents, "Add").toDispatch();
//		}
//		// 打开一个存在的word文档,并用document 引用 引用它
//		public void openFile(String wordFilePath) {
//			// Find the Documents collection object maintained by Word
//			// documents表示word的所有文档窗口，（word是多文档应用程序）
//			Dispatch documents = Dispatch.get(MsWordApp, "Documents").toDispatch();
//			document = Dispatch.call(documents, "Open", wordFilePath,
//					new Variant(true)/* 是否进行转换ConfirmConversions */,
//					new Variant(false)/* 是否只读 */).toDispatch();
//			// document = Dispatch.invoke(documents, "Open", Dispatch.Method,
//			// new Object[] { wordFilePath, new Variant(true),
//			// new Variant(false)
//			// }, new int[1]).toDispatch();
//		}
//		// 向 document 中插入文本内容
//		public void insertText(String textToInsert) {
//			// Get the current selection within Word at the moment.
//			// a new document has just been created then this will be at
//			// the top of the new doc 获得选 中的内容，如果是一个新创建的文件，因里面无内容，则光标应处于文件开头处
//			Dispatch selection = Dispatch.get(MsWordApp, "Selection").toDispatch();
//			// 取消选中,应该就是移动光标 ，否则 新添加的内容会覆盖选中的内容
//			Dispatch.call(selection, "MoveRight", new Variant(1), new Variant(1));
//			// Put the specified text at the insertion point
//			Dispatch.put(selection, "Text", textToInsert);
//			// 取消选中,应该就是移动光标
//			Dispatch.call(selection, "MoveRight", new Variant(1), new Variant(1));
//		}
//		// 向文档中添加 一个图片，
//		public void insertJpeg(String jpegFilePath) {
//			Dispatch selection = Dispatch.get(MsWordApp, "Selection").toDispatch();
//			Dispatch image = Dispatch.get(selection, "InLineShapes").toDispatch();
//			Dispatch.call(image, "AddPicture", jpegFilePath);
//		}
//		// 段落的处理,插入格式化的文本
//		public void insertFormatStr(String text) {
//			Dispatch wordContent = Dispatch.get(document, "Content").toDispatch(); // 取得word文件的内容
//			Dispatch.call(wordContent, "InsertAfter", text);// 插入一个段落到最后
//			Dispatch paragraphs = Dispatch.get(wordContent, "Paragraphs")
//					.toDispatch(); // 所有段落
//			int paragraphCount = Dispatch.get(paragraphs, "Count").changeType(
//					Variant.VariantInt).getInt();// 一共的段落数
//			// 找到刚输入的段落，设置格式
//			Dispatch lastParagraph = Dispatch.call(paragraphs, "Item",
//					new Variant(paragraphCount)).toDispatch(); // 最后一段（也就是刚插入的）
//			// Range 对象表示文档中的一个连续范围，由一个起始字符位置和一个终止字符位置定义
//			Dispatch lastParagraphRange = Dispatch.get(lastParagraph, "Range")
//					.toDispatch();
//			Dispatch font = Dispatch.get(lastParagraphRange, "Font").toDispatch();
//			Dispatch.put(font, "Bold", new Variant(true)); // 设置为黑体
//			Dispatch.put(font, "Italic", new Variant(true)); // 设置为斜体
//			Dispatch.put(font, "Name", new Variant("宋体")); //
//			Dispatch.put(font, "Size", new Variant(12)); // 小四
//			Dispatch selection = Dispatch.get(MsWordApp, "Selection").toDispatch();
//			Dispatch.call(selection, "TypeParagraph");// 插入一个空行
//			Dispatch alignment = Dispatch.get(selection, "ParagraphFormat")
//					.toDispatch();// 段落格式
//			Dispatch.put(alignment, "Alignment", "2"); // (1:置中 2:靠右 3:靠左)
//		}
//		// word 中在对表格进行遍历的时候 ，是先列后行 先column 后cell
//		// 另外下标从1开始
//		public void insertTable(String tableTitle, int row, int column) {
//			Dispatch selection = Dispatch.get(MsWordApp, "Selection").toDispatch(); // 输入内容需要的对象
//			Dispatch.call(selection, "TypeText", tableTitle); // 写入标题内容 // 标题格行
//			Dispatch.call(selection, "TypeParagraph"); // 空一行段落
//			Dispatch.call(selection, "TypeParagraph"); // 空一行段落
//			Dispatch.call(selection, "MoveDown"); // 游标往下一行
//			// 建立表格
//			Dispatch tables = Dispatch.get(document, "Tables").toDispatch();
//			// int count = Dispatch.get(tables,
//			// "Count").changeType(Variant.VariantInt).getInt(); // document中的表格数量
//			// Dispatch table = Dispatch.call(tables, "Item", new Variant(
//			// 1)).toDispatch();//文档中第一个表格
//			Dispatch range = Dispatch.get(selection, "Range").toDispatch();// /当前光标位置或者选中的区域
//			Dispatch newTable = Dispatch.call(tables, "Add", range,
//					new Variant(row), new Variant(column), new Variant(1))
//					.toDispatch(); // 设置row,column,表格外框宽度
//			Dispatch cols = Dispatch.get(newTable, "Columns").toDispatch(); // 此表的所有列，
//			int colCount = Dispatch.get(cols, "Count").changeType(
//					Variant.VariantInt).getInt();// 一共有多少列 实际上这个数==column
//			System.out.println(colCount + "列");
//			for (int i = 1; i <= colCount; i++) { // 循环取出每一列
//				Dispatch col = Dispatch.call(cols, "Item", new Variant(i))
//						.toDispatch();
//				Dispatch cells = Dispatch.get(col, "Cells").toDispatch();// 当前列中单元格
//				int cellCount = Dispatch.get(cells, "Count").changeType(
//						Variant.VariantInt).getInt();// 当前列中单元格数 实际上这个数等于row
//				for (int j = 1; j <= cellCount; j++) {// 每一列中的单元格数
//					// Dispatch cell = Dispatch.call(cells, "Item", new
//					// Variant(j)).toDispatch(); //当前单元格
//					// Dispatch cell = Dispatch.call(newTable, "Cell", new
//					// Variant(j) , new Variant(i) ).toDispatch(); //取单元格的另一种方法
//					// Dispatch.call(cell, "Select");//选中当前单元格
//					// Dispatch.put(selection, "Text",
//					// "第"+j+"行，第"+i+"列");//往选中的区域中填值，也就是往当前单元格填值
//					putTxtToCell(newTable, j, i, "第" + j + "行，第" + i + "列");// 与上面四句的作用相同
//				}
//			}
//		}
//		/** */
//		/**
//		 * 在指定的单元格里填写数据
//		 *
//		 * @param tableIndex
//		 * @param cellRowIdx
//		 * @param cellColIdx
//		 * @param txt
//		 */
//		public void putTxtToCell(Dispatch table, int cellRowIdx, int cellColIdx,
//				String txt) {
//			Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),
//					new Variant(cellColIdx)).toDispatch();
//			Dispatch.call(cell, "Select");
//			Dispatch selection = Dispatch.get(MsWordApp, "Selection").toDispatch(); // 输入内容需要的对象
//			Dispatch.put(selection, "Text", txt);
//		}
//		/** */
//		/**
//		 * 在指定的单元格里填写数据
//		 *
//		 * @param tableIndex
//		 * @param cellRowIdx
//		 * @param cellColIdx
//		 * @param txt
//		 */
//		public void putTxtToCell(int tableIndex, int cellRowIdx, int cellColIdx,
//				String txt) {
//			// 所有表格
//			Dispatch tables = Dispatch.get(document, "Tables").toDispatch();
//			// 要填充的表格
//			Dispatch table = Dispatch.call(tables, "Item", new Variant(tableIndex))
//					.toDispatch();
//			Dispatch cell = Dispatch.call(table, "Cell", new Variant(cellRowIdx),
//					new Variant(cellColIdx)).toDispatch();
//			Dispatch.call(cell, "Select");
//			Dispatch selection = Dispatch.get(MsWordApp, "Selection").toDispatch(); // 输入内容需要的对象
//			Dispatch.put(selection, "Text", txt);
//		}
//		// 合并两个单元格
//		public void mergeCell(Dispatch cell1, Dispatch cell2) {
//			Dispatch.call(cell1, "Merge", cell2);
//		}
//		public void mergeCell(Dispatch table, int row1, int col1, int row2, int col2) {
//			Dispatch cell1 = Dispatch.call(table, "Cell", new Variant(row1),
//					new Variant(col1)).toDispatch();
//			Dispatch cell2 = Dispatch.call(table, "Cell", new Variant(row2),
//					new Variant(col2)).toDispatch();
//			mergeCell(cell1, cell2);
//		}
//		public void mergeCellTest() {
//			Dispatch tables = Dispatch.get(document, "Tables").toDispatch();
//			int tableCount = Dispatch.get(tables, "Count").changeType(
//					Variant.VariantInt).getInt(); // document中的表格数量
//			Dispatch table = Dispatch.call(tables, "Item", new Variant(tableCount))
//					.toDispatch();// 文档中最后一个table
//			mergeCell(table, 1, 1, 1, 2);// 将table 中x=1,y=1 与x=1,y=2的两个单元格合并
//		}
//		// ========================================================
//		/** */
//		/**
//		 * 把选定的内容或光标插入点向上移动
//		 *
//		 * @param pos
//		 *            移动的距离
//		 */
//		public void moveUp(int pos) {
//			Dispatch selection = Dispatch.get(MsWordApp, "Selection").toDispatch(); // 输入内容需要的对象
//			for (int i = 0; i < pos; i++) {
//				// MoveDown MoveLeft moveRight
//				// moveStart ( Dispatch.call(selection, "HomeKey", new Variant(6));
//				// )
//				// moveEnd Dispatch.call(selection, "EndKey", new Variant(6));
//				Dispatch.call(selection, "MoveUp");
//			}
//		}
//		/** */
//		/**
//		 * 从选定内容或插入点开始查找文本
//		 *
//		 * @param toFindText
//		 *            要查找的文本
//		 * @return boolean true-查找到并选中该文本，false-未查找到文本
//		 */
//		public boolean find(String toFindText) {
//			if (toFindText == null || toFindText.equals(""))
//				return false;
//			Dispatch selection = Dispatch.get(MsWordApp, "Selection").toDispatch(); // 输入内容需要的对象
//			// 从selection所在位置开始查询
//			Dispatch find = Dispatch.call(selection, "Find").toDispatch();
//			// 设置要查找的内容
//			Dispatch.put(find, "Text", toFindText);
//			// 向前查找
//			Dispatch.put(find, "Forward", "True");
//			// 设置格式
//			Dispatch.put(find, "Format", "True");
//			// 大小写匹配
//			Dispatch.put(find, "MatchCase", "True");
//			// 全字匹配
//			Dispatch.put(find, "MatchWholeWord", "True");
//			// 查找并选中
//			return Dispatch.call(find, "Execute").getBoolean();
//		}
//		/** */
//		/**
//		 * 把选定选定内容设定为替换文本
//		 *
//		 * @param toFindText
//		 *            查找字符串
//		 * @param newText
//		 *            要替换的内容
//		 * @return
//		 */
//		public boolean replaceText(String toFindText, String newText) {
//			if (!find(toFindText))
//				return false;
//			Dispatch selection = Dispatch.get(MsWordApp, "Selection").toDispatch(); // 输入内容需要的对象
//			Dispatch.put(selection, "Text", newText);
//			return true;
//		}
//		public void printFile() {
//			// Just print the current document to the default printer
//			Dispatch.call(document, "PrintOut");
//		}
//		// 保存文档的更改
//		public void save() {
//			Dispatch.call(document, "Save");
//		}
//		public void saveFileAs(String filename) {
//			Dispatch.call(document, "SaveAs", filename);
//		}
//		public void closeDocument() {
//			// Close the document without saving changes
//			// 0 = wdDoNotSaveChanges
//			// -1 = wdSaveChanges
//			// -2 = wdPromptToSaveChanges
//			Dispatch.call(document, "Close", new Variant(0));
//			document = null;
//		}
//		public void closeWord() {
//			Dispatch.call(MsWordApp, "Quit");
//			MsWordApp = null;
//			document = null;
//		}
//		// 设置wordApp打开后窗口的位置
//		public void setLocation() {
//			Dispatch activeWindow = Dispatch.get(MsWordApp, "Application")
//					.toDispatch();
//			Dispatch.put(activeWindow, "WindowState", new Variant(1)); // 0=default
//			// 1=maximize
//			// 2=minimize
//			Dispatch.put(activeWindow, "Top", new Variant(0));
//			Dispatch.put(activeWindow, "Left", new Variant(0));
//			Dispatch.put(activeWindow, "Height", new Variant(600));
//			Dispatch.put(activeWindow, "width", new Variant(800));
//		}
//	}
//	public class JacobTest2 {
//		public static void createANewFileTest() {
//			WordBean wordBean = new WordBean();
//			// word.openWord(true);// 打开 word 程序
//			wordBean.setVisible(true);
//			wordBean.createNewDocument();// 创建一个新文档
//			wordBean.setLocation();// 设置打开后窗口的位置
//			wordBean.insertText("你好");// 向文档中插入字符
//			wordBean.insertJpeg("D:" + File.separator + "a.jpg"); // 插入图片
//			// 如果 ，想保存文件，下面三句
//			// word.saveFileAs("d://a.doc");
//			// word.closeDocument();
//			// word.closeWord();
//		}
//		public static void openAnExistsFileTest() {
//			WordBean wordBean = new WordBean();
//			wordBean.setVisible(true); // 是否前台打开word 程序，或者后台运行
//			wordBean.openFile("d://a.doc");
//			wordBean.insertJpeg("D:" + File.separator + "a.jpg"); // 插入图片(注意刚打开的word
//			// ，光标处于开头，故，图片在最前方插入)
//			wordBean.save();
//			wordBean.closeDocument();
//			wordBean.closeWord();
//		}
//		public static void insertFormatStr(String str) {
//			WordBean wordBean = new WordBean();
//			wordBean.setVisible(true); // 是否前台打开word 程序，或者后台运行
//			wordBean.createNewDocument();// 创建一个新文档
//			wordBean.insertFormatStr(str);// 插入一个段落，对其中的字体进行了设置
//		}
//		public static void insertTableTest() {
//			WordBean wordBean = new WordBean();
//			wordBean.setVisible(true); // 是否前台打开word 程序，或者后台运行
//			wordBean.createNewDocument();// 创建一个新文档
//			wordBean.setLocation();
//			wordBean.insertTable("表名", 3, 2);
//			wordBean.saveFileAs("d://table.doc");
//			wordBean.closeDocument();
//			wordBean.closeWord();
//		}
//		public static void mergeTableCellTest() {
//			insertTableTest();//生成d://table.doc
//			WordBean wordBean = new WordBean();
//			wordBean.setVisible(true); // 是否前台打开word 程序，或者后台运行
//			wordBean.openFile("d://table.doc");
//			wordBean.mergeCellTest();
//		}
//		public static void main(String[] args) {
//			// 进行测试前要保证d://a.jpg 图片文件存在
//			// createANewFileTest();//创建一个新文件
//			// openAnExistsFileTest();// 打开一个存在 的文件
//			// insertFormatStr("格式 化字符串");//对字符串进行一定的修饰
//			//insertTableTest();// 创建一个表格
//		   mergeTableCellTest();// 对表格中的单元格进行合并
//		}
//	}
}
